/******  bibliotheques  ****************************************************/
/**/ #ifndef _Ligne
/**/ #define _Ligne
/**/ #include <stdlib.h>
/**/ #include <stdio.h>
/**/ #include "Pion.h"
/**/ #include "Grille.h"
/******  fin des bibliotheques  ********************************************/


/** @brief Ligne.h module Ligne sert a initialiser, modifier et effacer la ligne
           la ligne est au dessus de la grille,
           elle sert a deplacer le pion avant d'etre place dans la grille
	@author Cecile
	@author Doriane
	@file Ligne.h
	@date 2010/05/26
**/


/** @struct Ligne
            dimX : entier positif : dimension de la ligne
                nombre de colonnes = indice dans la ligne
            pion : pointeur sur une structure Pion
            tableau : pointeur sur un caractere (tableau 1D)
**/
typedef struct
{
	int dimX;
	Pion * pion;
	char * tableau;
}Ligne;



/** @brief LigneInitialise initialise la dimension (dimX) de la ligne
                            avec la dimension X de la grille rentree en parametre
                           initialise un pion
                           alloue de la memoire pour un tableau 1 dimension de la taille dimX
                           remplace chaque case de ce tableau par '_'
	@param[in] ligne pointeur sur une structure Ligne
	@param[in] grille pointeur constant sur une structure Grille
**/
void LigneInitialise (Ligne * ligne, const Grille * grille);


/** @brief LigneEfface libere la ligne en mettant sa dimension (dimX) a 0,
                           appelle la procedure PionEfface
                           libere la memoire du tableau
                           ligne doit etre initialisee
	@param[in] ligne pointeur sur une structure Ligne
**/
void LigneEfface (Ligne * ligne);


/** @brief LigneModifie modifie la ligne en fonction du deplacement du pion,
                    la case du pion est symbolisee par '#'
            ligne doit etre initialisee
	@param[in] ligne pointeur sur une structure Ligne
**/
void LigneModifie (Ligne * ligne, const char direction);


/** @brief AffichePionDansLigne affiche la ligne (avec la presence d'un pion)
           ligne doit etre initialisee
	@param[in] ligne pointeur sur une structure Ligne
**/
void AffichePionDansLigne(Ligne * ligne);


/** @brief GetLigne renvoie le caractere present dans la ligne a la coordonnee x
	@param[in] ligne pointeur constant sur une structure Ligne
	@param[in] x entier constant positif (inferieur a la dimension de la ligne)
	@param[out] caractere
**/
char GetLigne (const Ligne * ligne, const int x);


/** @brief GetDimx renvoie un entier : la dimension de la ligne
           ligne doit etre initialisee
	@param[in] ligne pointeur constant sur une structure Ligne
	@param[out] entier
**/
int GetDimx (const Ligne * ligne);


/** @brief SetLigne modifie la case de coordonnee x, dans la ligne avec valeur
           ligne doit etre initialisee
	@param[in] ligne pointeur sur une structure Ligne
	@param[in] x entier constant : coordonnee de la case a changer
	@param[in] valeur caractere constant : nouveau caractere de la case a modifier
**/
void SetLigne (Ligne * ligne, const int x, const char valeur);


#endif
